home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / comm / uucp / AM114src.lha / show.c < prev    next >
C/C++ Source or Header  |  1992-07-08  |  5KB  |  245 lines

  1. /*
  2.  *
  3.  *  AM --- AmigaMail
  4.  *  (C) 1991, 1992 by Christian Riede
  5.  *
  6.  *  AM is distributed in the hope that it will be useful, but WITHOUT ANY
  7.  *  WARRANTY.  No author or distributor accepts responsibility to anyone
  8.  *  for the consequences of using it or for whether it serves any
  9.  *  particular purpose or works at all, unless he says so in writing.
  10.  *  Refer to the GNU General Public License, Version 1, for full details.
  11.  *  
  12.  *  Everyone is granted permission to copy, modify and redistribute AM,
  13.  *  but only under the conditions described in the GNU General Public
  14.  *  License, Version 1.  A copy of this license is supposed to have been 
  15.  *  given to you along with AM so you can know your rights and responsi-
  16.  *  bilities.  It should be in a file named COPYING.  Among other things,
  17.  *  the copyright notice and this notice must be preserved on all copies.
  18.  *
  19.  *  
  20.  *
  21.  */
  22.  
  23.  
  24. #include "am.h"
  25.  
  26. /* extract realname from address, if exists */
  27. /* provide buffer in t, pointer to t containing the realname if exists */
  28. /* or the username is returned */
  29. /* attention: t does not necessarily contain the realname on return */
  30. char *GetRealname(char *s,char *t)
  31. {
  32.     char *savet;
  33.     int klammer = 0;
  34.     int quote = FALSE;
  35.     int esc = FALSE;
  36.  
  37.     savet = t;
  38.  
  39.     while (*s)
  40.     {
  41.         switch(*s)
  42.         {
  43.             case '(':
  44.                 if (klammer) *t++=*s;
  45.                 else t = savet; 
  46.                 klammer++;
  47.                 break;
  48.             case ')':
  49.                 if (klammer>1) *t++ = *s;
  50.                 if (klammer>0) klammer--;
  51.                 break;
  52.             case '<':
  53.                 if (!quote)
  54.                     goto done;
  55.                 break;
  56.             case '"':
  57.                 if (!esc)
  58.                     quote = !quote;
  59.             default: 
  60.                 *t++=*s;
  61.                 break;
  62.         }
  63.         if (*s=='\\') {if (!esc) esc = TRUE;} else esc = FALSE;
  64.         s++;
  65.     }
  66. done:
  67.     *t=0;
  68.  
  69.     return(savet);
  70. }
  71.  
  72. /* extract username from address, if exists */
  73. /* provide buffer in t, pointer to t containing the username */
  74. char *GetUsername(char *s,char *t)
  75. {
  76.     char *savet;
  77.  
  78.     savet = t;
  79.  
  80.     while (*s)
  81.     {
  82.         switch(*s)
  83.         {
  84.             case '<':
  85.                 t = savet; 
  86.                 break;
  87.             case '>':
  88.                 goto done;
  89.                 break;
  90.             case '(':
  91.                 goto done;
  92.                 break;
  93.             default:
  94.                 *t++=*s;
  95.                 break;
  96.         }
  97.  
  98.         s++;
  99.     }
  100.  
  101. done:
  102.     *t=0;
  103.  
  104.     return(savet);
  105. }
  106.  
  107. void ShowAll(struct List *Mailbox)
  108. {
  109.     char RealFromName[160];
  110.     char RealToName[160];
  111.     struct Mail *Mail;
  112.  
  113.     for (Mail=(struct Mail *)Mailbox->lh_Head;
  114.         Mail->m_Node.ln_Succ;
  115.         Mail=(struct Mail *)Mail->m_Node.ln_Succ)
  116.     {
  117.         Mail->m_SelectNode.ln_Name = Mail->DisplayText;
  118.  
  119.             
  120.         sprintf(Mail->DisplayText,"%c(%04ld) Fr:%-18.18s To:%-18.18s Subj:%-100.100s",
  121.  
  122.         /* read? */
  123.             (Mail->read&MAIL_READ)?('R'):(' '),
  124.     
  125.         /* Number */
  126.             Mail->Number,
  127.  
  128.         /* From */
  129.             (*Mail->From)?
  130.             (GetRealname(Mail->From,RealFromName)):("none"),
  131.  
  132.         /* To */
  133.             (*Mail->To)?
  134.             (GetRealname(Mail->To,RealToName)):("none"),
  135.  
  136.         /* Subject */
  137.             (*Mail->Subject)?
  138.             (Mail->Subject):("none")
  139.  
  140.         ); /* of sprintf */
  141.     }
  142. }
  143.  
  144. void ShowSubject(struct List *Mailbox)
  145. {
  146.     struct Mail *Mail;
  147.  
  148.     for (Mail=(struct Mail *)Mailbox->lh_Head;
  149.         Mail->m_Node.ln_Succ;
  150.         Mail=(struct Mail *)Mail->m_Node.ln_Succ)
  151.     {
  152.         Mail->m_SelectNode.ln_Name = Mail->DisplayText;
  153.         if (*Mail->Subject)
  154.             sprintf(Mail->DisplayText,"%c(%04ld) Subject: %-142.142s",
  155.                 (Mail->read&MAIL_READ)?('R'):(' '),
  156.                 Mail->Number,Mail->Subject);
  157.         else
  158.             sprintf(Mail->DisplayText,"%c(%04ld) Subject: (none)",
  159.                 (Mail->read&MAIL_READ)?('R'):(' '),
  160.                 Mail->Number);
  161.     }
  162. }
  163.  
  164. void ShowFrom(struct List *Mailbox)
  165. {
  166.     struct Mail *Mail;
  167.  
  168.     for (Mail=(struct Mail *)Mailbox->lh_Head;
  169.         Mail->m_Node.ln_Succ;
  170.         Mail=(struct Mail *)Mail->m_Node.ln_Succ)
  171.     {
  172.         Mail->m_SelectNode.ln_Name = Mail->DisplayText;
  173.         if (*Mail->From)
  174.             sprintf(Mail->DisplayText,"%c(%04ld) From: %-145.145s",
  175.                 (Mail->read&MAIL_READ)?('R'):(' '),
  176.                 Mail->Number,Mail->From);
  177.         else
  178.             sprintf(Mail->DisplayText,"%c(%04ld) From: (none)",
  179.                 (Mail->read&MAIL_READ)?('R'):(' '),
  180.                 Mail->Number);
  181.     }
  182. }
  183.  
  184. void ShowTo(struct List *Mailbox)
  185. {
  186.     struct Mail *Mail;
  187.  
  188.     for (Mail=(struct Mail *)Mailbox->lh_Head;
  189.         Mail->m_Node.ln_Succ;
  190.         Mail=(struct Mail *)Mail->m_Node.ln_Succ)
  191.     {
  192.         Mail->m_SelectNode.ln_Name = Mail->DisplayText;
  193.         if (*Mail->To)
  194.             sprintf(Mail->DisplayText,"%c(%04ld) To: %-147.147s",
  195.                 (Mail->read&MAIL_READ)?('R'):(' '),
  196.                 Mail->Number,Mail->To);
  197.         else
  198.             sprintf(Mail->DisplayText,"%c(%04ld) To: (none)",
  199.                 (Mail->read&MAIL_READ)?('R'):(' '),
  200.                 Mail->Number);
  201.     }
  202. }
  203.  
  204. void ShowDate(struct List *Mailbox)
  205. {
  206.     struct Mail *Mail;
  207.     char Date[60];
  208.  
  209.     for (Mail=(struct Mail *)Mailbox->lh_Head;
  210.         Mail->m_Node.ln_Succ;
  211.         Mail=(struct Mail *)Mail->m_Node.ln_Succ)
  212.     {
  213.         Mail->m_SelectNode.ln_Name = Mail->DisplayText;
  214.         if (Mail->Date)
  215.             sprintf(Mail->DisplayText,"%c(%04ld) Date: %-145.145s",
  216.                 (Mail->read&MAIL_READ)?('R'):(' '),
  217.                 Mail->Number,DateTime(Mail->Date,Date));
  218.         else
  219.             sprintf(Mail->DisplayText,"%c(%04ld) Date: (none)",
  220.                 (Mail->read&MAIL_READ)?('R'):(' '),
  221.                 Mail->Number);
  222.     }
  223. }
  224.  
  225. void ShowMsgId(struct List *Mailbox)
  226. {
  227.     struct Mail *Mail;
  228.  
  229.     for (Mail=(struct Mail *)Mailbox->lh_Head;
  230.         Mail->m_Node.ln_Succ;
  231.         Mail=(struct Mail *)Mail->m_Node.ln_Succ)
  232.     {
  233.         Mail->m_SelectNode.ln_Name = Mail->DisplayText;
  234.         if (*Mail->MsgId)
  235.             sprintf(Mail->DisplayText,"%c(%04ld) Msg-Id: %-143.143s",
  236.                 (Mail->read&MAIL_READ)?('R'):(' '),
  237.                 Mail->Number,Mail->MsgId);
  238.         else
  239.             sprintf(Mail->DisplayText,"%c(%04ld) Msg-Id: (none)",
  240.                 (Mail->read&MAIL_READ)?('R'):(' '),
  241.                 Mail->Number);
  242.     }
  243. }
  244.  
  245.